# -*- encoding: utf-8 -*-
'''
Created on 22/11/2012

@author: jotagê sales
'''

# -*- encoding: utf-8 -*- #codificação linux
#Codificação windows cp1252
import smtplib
from email.MIMEBase import MIMEBase
from email.MIMEMultipart import MIMEMultipart
from email.Utils import formatdate
from email import Encoders
from email.MIMEText import MIMEText
from compiler.pycodegen import EXCEPT

class Email(object):
    def __init__(self, pServidorEmail= None, pPorta = None, pLogin= None, pSenha = None  ):
        #Classe criada para enviar email
        if not pServidorEmail:
            raise Exception('Por favor informe o servidor de email.')
        if not pPorta:
            raise Exception('Por favor inforem a porta.')
        if not pLogin:
            raise Exception('Por favor informe o usuário do email.')
        if not pSenha:
            raise Exception('Por favor inforem a senha.')
        try:
            self.__servidorEmail = smtplib.SMTP(pServidorEmail, pPorta)
        except Exception, e:
            raise Exception('Não foi possível conectar com o servidor de email. \nMensagem Original: %s'%str(e))
            
        try:
            self.__servidorEmail.starttls()
            self.__servidorEmail.login(pLogin, pSenha)
        except Exception, e:
            raise Exception ('Não foi possível conectar com usuário. \nMensagem Original: %s'%str(e))

        
        self._de = pLogin
        self._senha = pSenha
        self.__arquivos = [] #lista para anexar arquivos
        
    def anexar_aquivos(self, pCaminho):
        #Colocar a lista de caminho dos arquivos a serem anexados
        self.__arquivos.append(pCaminho)
    
    def carrega_arquivos(self, m_message):
        #anexa verdadeiramente os arquivos no email
        for file in self.__arquivos:
                        part = MIMEBase('application', "octet-stream")
                        part.set_payload(open(file,'rb').read())
                        Encoders.encode_base64(part)
                        part.add_header('Content-Disposition', 'attachment; filename="%s"' % file)
                        m_message.attach(part)    
 
        return m_message

    def enviando_mail(self, pPara, pAssunto, pMensagem, content_type='plain', charset='UTF-8'):
        """Enviando email"""
        try:
            if all([pMensagem, pAssunto, self._de, pPara]):                                
                m_message             = MIMEMultipart()
                m_message['From']     = self._de
                m_message['To']       = pPara
                m_message['Date']     = formatdate(localtime=True)
                m_message['Subject']  = pAssunto
                m_message['X-Mailer'] = "Python X-Mailer"
        
                m_message.attach(MIMEText(pMensagem, content_type, charset))
        
                m_message = self.carrega_arquivos(m_message)
            
                self.__servidorEmail.sendmail(self._de, pPara, m_message.as_string())
            
                self.__servidorEmail.close()
            return True, True
        except Exception, e:
            return False, str(e)
        
# testes da classe
try:
    print 'Conectando ...'
    email_informativo= Email('',587,'jotage_sales@hotmail.com','samanta2')
    try:
        print 'Conexao realizada com sucesso'
        print 'Enviando e-mail'
        email_informativo.enviando_mail('lucas@grupovilanova.com.br',
                                         'teste',
                                         'teste de ')
        print 'E-mail enviado com sucesso !!!'
    except Exception:
        print 'erro ao enviar e-mail'        
except Exception,e:
    print 'Erro ao tentar conectar no servidor'
